package com.ly.nethub.interf

import android.content.Context
import com.ly.nethub.config.NetHubOptions
import com.ly.nethub.netty.HeartbeatFactory
import com.ly.nethub.task.BaseTask

typealias OtherMsgCallback = (msg: Any?) -> Unit

/**
 * 长连接抽象接口
 */
interface INetHubInterface {

    /**
     * 初始化
     * @param context 上下文 尽量是Application
     * @param options 长连接配置项,建议走 persistentLinkOptions方法构建
     * @param connectStatusListener 连接状态监听
     * @param heartbeatFactory 心跳消息构造工厂
     * @param otherMsgCallback 未被处理的消息回调，一般是由服务端主动上报的消息
     */
    fun init(
        context: Context,
        options: NetHubOptions,
        heartbeatFactory: HeartbeatFactory,
        connectStatusListener: ConnectStatusListener? = null,
        otherMsgCallback: OtherMsgCallback? = null
    ): Boolean

    /**
     * 连接
     */
    suspend fun connect()


    /**
     * 尝试重连所有连接
     * @param isFirstConnect 是否是首次连接
     */
    suspend fun reconnect(isFirstConnect: Boolean)

    /**
     * 断开连接
     */
    fun disconnect(reconnect: Boolean = false)

    /**
     * 发送消息
     * @param task 通讯任务
     */
    fun sendTask(task: BaseTask)

    /**
     * 释放资源
     */
    fun release()
}